<?php
/*Definicion del observador.
 * Actualiza las bitacoras, envios, camionetas
 */
 
 class Observador{
	var $bitacora;#arr de bitacoras
	
	function __construct()
	{
		switch(func_num_args()){
			case 1:	if(trim(func_get_arg(0)) =="")return;
					break;
		}
	}
	
	function observer(){
		$con=new Conexion();
		$con->ejecutar("select id_bitacora from bitacoras where activo=1");
		#cargar todas las bitacoras activas
		while($con->traerFilaPorNombre()) {
			$this->bitacora=new Bitacora($con->get("id_bitacora"));
			if($this->_tiempoCaducado() )
				$this->_actualizarCaducado();	
		}
	}

	#hace la comparacion del timestampm, la hora que salio y el tiempo que dura el viaje para saber si ya caduco
	function _tiempoCaducado(){
		$b=$this->bitacora->getId();
		$f=$this->bitacora->fecha;
		$h=$this->bitacora->hora;
		
		$ha=new Hora();
		$da=new Fecha();
		$actual=Hora::getMktime($ha,$da);#mktime($ha->getHora(),$ha->getMinutos(),0,$da->getMes(),$da->getDia(),$da->getAno());
		$viaje=Hora::getMktime($h,$f);#mktime($h->getHora(),$h->getMinutos(),0,$f->getMes(),$f->getDia(),$f->getAno());
		$recorrido=($actual-$viaje)/60;#(segundos)/60 para obtener el equivalente en minutos
		
		if($recorrido > $this->bitacora->corrida->getTiempo())
		#si ya caduco el tiempo, es decir, hipoteticamente ya termino su viaje...			
			return true;
		return false;
	}
	
	function _actualizarCaducado(){
		#bajar la bandera de la bitacora
		$this->_actualizarBitacora();
		
		#anunciar los envios que tiene que recibir y actualizar su estatus-------------------------------------------------------------OJO
		$this->_actualizarEnvios();
		
		#actualizar la unidad
		$this->_actualizarUnidad();
	}
	
	function _actualizarBitacora(){
		new Conexion("update bitacoras set activo=0 where id_bitacora=".$this->bitacora->getId());
	}
	function _actualizarEnvios(){
		foreach($this->bitacora->envios as $nombre=>$e)
			$e->editarEstatus("Desembarcado");
	}
	function _actualizarUnidad(){
		#encolar la unidad
		$con=new Conexion();
		$con->ejecutar("select id_corrida from corridas where origen='".$this->bitacora->corrida->destino->getId()."' and destino='".$this->bitacora->corrida->origen->getId()."'");
		$id_corrida=$con->resultado(0,0);
		$con->ejecutar("update unidades set estado='en cola', id_sucursal='".$this->bitacora->corrida->destino->getId()."',corrida=".$id_corrida." where id_unidad='".$this->bitacora->unidad->getId()."'");
	}
}

?>
